package com.jdrx.ocp.service;

import com.jdrx.ocp.beans.constans.EDeleteFlag;
import com.jdrx.ocp.beans.dto.company.AddCompanyDTO;
import com.jdrx.ocp.beans.dto.company.UpdateCompanyDTO;
import com.jdrx.ocp.beans.entity.CompanyPO;
import com.jdrx.ocp.dao.CompanyDAO;
import com.jdrx.platform.commons.rest.beans.dto.IdDTO;
import com.jdrx.platform.commons.rest.exception.BizException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * 公司管理 Service
 * @author : zhongsen
 * @date : 2019/01/30 10:42
 */
@Service
public class CompanyService {

    private static final Logger logger = LoggerFactory.getLogger(CompanyService.class);

    @Autowired
    private CompanyDAO companyDAO;

    /**
     * 添加公司
     * @param addCompanyDTO
     * @param uid
     * @return
     */
    public String addCompany(AddCompanyDTO addCompanyDTO,Long uid) throws BizException {
        logger.info(String.format("添加公司信息。\nuid=%d\n%s",uid,addCompanyDTO));

        // 判断同一级下是否存在相同的公司名
        int pid=addCompanyDTO.getPid()==null ? 0 : addCompanyDTO.getPid();
        int num = companyDAO.isExistCompanyName(addCompanyDTO.getCompanyName(),pid);
        if(num>0){
            throw new BizException("公司名已存在");
        }

        // 添加公司信息
        CompanyPO companyPO=new CompanyPO();
        BeanUtils.copyProperties(addCompanyDTO,companyPO);
        companyPO.setCreateAt(new Date());
        companyPO.setCreateBy(uid);
        companyPO.setDelFlag(Integer.valueOf(EDeleteFlag.NORMAL.getKey()));
        if(companyDAO.insert(companyPO)>0){
            return "添加成功";
        }
        return "添加失败";
    }

    /**
     * 根据id修改公司
     * @param updateCompanyDTO
     * @param uid
     * @return
     */
    public String updateCompanyById(UpdateCompanyDTO updateCompanyDTO, Long uid) throws BizException {
        logger.info(String.format("修改公司信息。\nuid=%d\n%s",uid,updateCompanyDTO));

        // 检验公司名是否存在
        CompanyPO companyPO=companyDAO.getById(updateCompanyDTO.getId());
        int pid= updateCompanyDTO.getPid()==null ? 0 : updateCompanyDTO.getPid();
        if(!companyPO.getCompanyName().equals(updateCompanyDTO.getCompanyName())){
            int num = companyDAO.isExistCompanyName(updateCompanyDTO.getCompanyName(),pid);
            if(num>0){
                throw new BizException("公司名已存在");
            }
        }

        // 修改公司信息
        BeanUtils.copyProperties(updateCompanyDTO,companyPO);
        companyPO.setUpdateAt(new Date());
        companyPO.setUpdateBy(uid);
        if(companyDAO.update(companyPO)>0){
            return "修改成功";
        }

        return "修改失败";
    }

    /**
     * 根据id删除公司
     * @param idDTO
     * @return
     */
    public String deleteCompanyById(IdDTO<Integer> idDTO) throws BizException {
        if(companyDAO.isExistCompanyByPid(idDTO.getId())>0){
            throw new BizException("该公司下有子公司，不能删除");
        }

        if(companyDAO.deleteById(idDTO.getId())>0){
            return "删除成功";
        }

        return "删除失败";
    }

    /**
     * 根据id获取公司
     * @param idDTO
     * @return
     */
    public CompanyPO getCompanyById(IdDTO<Integer> idDTO){
        return companyDAO.getById(idDTO.getId());
    }
}
